Micron Document
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SparkN0de-git | SparkN0de |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Displaying Raw • Download


sbapp/mapview/mbtsource.py 4c8d17f4fbf0f51b2511a02e30b0dafbf1c7ab2e (4c8d17f4) Text, 3.27 KB

Te6edf3__all__ Tff7b72= Tb4b4b4[Ta5d6ff"Ta5d6ffMBTilesMapSourceTa5d6ff"Tb4b4b4]

Tff7b72import T7ee787io
Tff7b72import T7ee787sqlite3
Tff7b72import T7ee787threading

Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787image Tff7b72import Te6edf3Image Tff7b72as Te6edf3CoreImage
Tff7b72from T7ee787kivyT7ee787.T7ee787coreT7ee787.T7ee787image Tff7b72import Te6edf3ImageLoader

Tff7b72from T7ee787mapviewT7ee787.T7ee787downloader Tff7b72import Te6edf3Downloader
Tff7b72from T7ee787mapviewT7ee787.T7ee787source Tff7b72import Te6edf3MapSource

Tff7b72class T56d364MBTilesMapSourceTb4b4b4(Te6edf3MapSourceTb4b4b4)Tb4b4b4:
Tff7b72def Tff7b72__init__Tb4b4b4(Tff7b72selfTb4b4b4, Te6edf3filenameTb4b4b4, Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)Tb4b4b4:
Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ff__init__Tb4b4b4(Tff7b72*Tff7b72*Te6edf3kwargsTb4b4b4)
Tff7b72selfTff7b72.Td2a8fffilename Tff7b72= Te6edf3filename
Tff7b72selfTff7b72.Td2a8ffdb Tff7b72= Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Te6edf3filenameTb4b4b4)

T8b949e# Read metadata
Te6edf3c Tff7b72= Tff7b72selfTff7b72.Td2a8ffdbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3metadata Tff7b72= Tffa657dictTb4b4b4(Te6edf3cTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffSELECT * FROM metadataTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3metadataTb4b4b4[Ta5d6ff"Ta5d6ffformatTa5d6ff"Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffpbfTa5d6ff"Tb4b4b4: Tff7b72raise Tf85149ValueErrorTb4b4b4(Ta5d6ff"Ta5d6ffOnly raster maps are supported, not vector maps.Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmin_zoom Tff7b72= Tffa657intTb4b4b4(Te6edf3metadataTb4b4b4[Ta5d6ff"Ta5d6ffminzoomTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffmax_zoom Tff7b72= Tffa657intTb4b4b4(Te6edf3metadataTb4b4b4[Ta5d6ff"Ta5d6ffmaxzoomTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffattribution Tff7b72= Te6edf3metadataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffattributionTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffbounds Tff7b72= Te6edf3bounds Tff7b72= Tff7b72None
Te6edf3cx Tff7b72= Te6edf3cy Tff7b72= T79c0ff0.0
Te6edf3cz Tff7b72= T79c0ff5
Tff7b72if Ta5d6ff"Ta5d6ffboundsTa5d6ff" Tff7b72in Te6edf3metadataTb4b4b4: Tff7b72selfTff7b72.Td2a8ffbounds Tff7b72= Te6edf3bounds Tff7b72= Tffa657tupleTb4b4b4(Tffa657mapTb4b4b4(Tffa657floatTb4b4b4, Te6edf3metadataTb4b4b4[Ta5d6ff"Ta5d6ffboundsTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff,Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ffcenterTa5d6ff" Tff7b72in Te6edf3metadataTb4b4b4: Te6edf3cxTb4b4b4, Te6edf3cyTb4b4b4, Te6edf3cz Tff7b72= Tffa657tupleTb4b4b4(Tffa657mapTb4b4b4(Tffa657floatTb4b4b4, Te6edf3metadataTb4b4b4[Ta5d6ff"Ta5d6ffcenterTa5d6ff"Tb4b4b4]Tff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff,Ta5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4)
Tff7b72elif Tff7b72selfTff7b72.Td2a8ffboundsTb4b4b4:
Te6edf3cx Tff7b72= Tb4b4b4(Te6edf3boundsTb4b4b4[T79c0ff2Tb4b4b4] Tff7b72+ Te6edf3boundsTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4) Tff7b72/ T79c0ff2.0
Te6edf3cy Tff7b72= Tb4b4b4(Te6edf3boundsTb4b4b4[T79c0ff3Tb4b4b4] Tff7b72+ Te6edf3boundsTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4) Tff7b72/ T79c0ff2.0
Te6edf3cz Tff7b72= Tff7b72selfTff7b72.Td2a8ffmin_zoom

Tff7b72selfTff7b72.Td2a8ffdefault_lon Tff7b72= Te6edf3cx
Tff7b72selfTff7b72.Td2a8ffdefault_lat Tff7b72= Te6edf3cy
Tff7b72selfTff7b72.Td2a8ffdefault_zoom Tff7b72= Tffa657intTb4b4b4(Te6edf3czTb4b4b4)
Tff7b72selfTff7b72.Td2a8ffprojection Tff7b72= Te6edf3metadataTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffprojectionTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72selfTff7b72.Td2a8ffis_xy Tff7b72= Tff7b72selfTff7b72.Td2a8ffprojection Tff7b72== Ta5d6ff"Ta5d6ffxyTa5d6ff"

Tff7b72def Td2a8fffill_tileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tileTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3tileTff7b72.Td2a8ffstate Tff7b72== Ta5d6ff"Ta5d6ffdoneTa5d6ff"Tb4b4b4: Tff7b72return
Te6edf3DownloaderTff7b72.Td2a8ffinstanceTb4b4b4(Tff7b72selfTff7b72.Td2a8ffcache_dirTb4b4b4)Tff7b72.Td2a8ffsubmitTb4b4b4(Tff7b72selfTff7b72.Td2a8ff_load_tileTb4b4b4, Te6edf3tileTb4b4b4)

Tff7b72def Td2a8ff_load_tileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tileTb4b4b4)Tb4b4b4:
T8b949e# global db context cannot be shared across threads.
Te6edf3ctx Tff7b72= Te6edf3threadingTff7b72.Td2a8fflocalTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tffa657hasattrTb4b4b4(Te6edf3ctxTb4b4b4, Ta5d6ff"Ta5d6ffdbTa5d6ff"Tb4b4b4)Tb4b4b4: Te6edf3ctxTff7b72.Td2a8ffdb Tff7b72= Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tff7b72selfTff7b72.Td2a8fffilenameTb4b4b4)

T8b949e# get the right tile
Te6edf3c Tff7b72= Te6edf3ctxTff7b72.Td2a8ffdbTff7b72.Td2a8ffcursorTb4b4b4(Tb4b4b4)
Te6edf3cTff7b72.Td2a8ffexecuteTb4b4b4( Ta5d6ff"Ta5d6ffSELECT tile_data FROM tiles WHERE zoom_level=? AND tile_column=? AND tile_row=?Ta5d6ff"Tb4b4b4,
Tb4b4b4(Te6edf3tileTff7b72.Td2a8ffzoomTb4b4b4, Te6edf3tileTff7b72.Td2a8fftile_xTb4b4b4, Te6edf3tileTff7b72.Td2a8fftile_yTb4b4b4) Tb4b4b4)
Te6edf3row Tff7b72= Te6edf3cTff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3rowTb4b4b4:
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffdoneTa5d6ff"
Tff7b72return

T8b949e# no-file loading
Tff7b72tryTb4b4b4: Te6edf3data Tff7b72= Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Te6edf3rowTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)
Tff7b72except Tf85149ExceptionTb4b4b4:
T8b949e# android issue, "buffer" does not have the buffer interface
T8b949e# ie row[0] buffer is not compatible with BytesIO on Android??
Te6edf3data Tff7b72= Te6edf3ioTff7b72.Td2a8ffBytesIOTb4b4b4(Tffa657bytesTb4b4b4(Te6edf3rowTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4)Tb4b4b4)
Te6edf3im Tff7b72= Te6edf3CoreImageTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3extTff7b72=Ta5d6ff'Ta5d6ffpngTa5d6ff'Tb4b4b4, Te6edf3filenameTff7b72=Ta5d6ff"Tffd700{}Ta5d6ff.Tffd700{}Ta5d6ff.Tffd700{}Ta5d6ff.pngTa5d6ff"Tff7b72.Td2a8ffformatTb4b4b4(Te6edf3tileTff7b72.Td2a8ffzoomTb4b4b4, Te6edf3tileTff7b72.Td2a8fftile_xTb4b4b4, Te6edf3tileTff7b72.Td2a8fftile_yTb4b4b4)Tb4b4b4)

Tff7b72if Te6edf3im Tff7b72is Tff7b72NoneTb4b4b4:
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffdoneTa5d6ff"
Tff7b72return

Tff7b72return Tff7b72selfTff7b72.Td2a8ff_load_tile_doneTb4b4b4, Tb4b4b4(Te6edf3tileTb4b4b4, Te6edf3imTb4b4b4,Tb4b4b4)

Tff7b72def Td2a8ff_load_tile_doneTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3tileTb4b4b4, Te6edf3imTb4b4b4)Tb4b4b4:
Te6edf3tileTff7b72.Td2a8fftexture Tff7b72= Te6edf3imTff7b72.Td2a8fftexture
Te6edf3tileTff7b72.Td2a8ffstate Tff7b72= Ta5d6ff"Ta5d6ffneed-animationTa5d6ff"

Tff7b72def Td2a8ffget_xTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3lonTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_xyTb4b4b4: Tff7b72return Te6edf3lon
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_xTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3lonTb4b4b4)

Tff7b72def Td2a8ffget_yTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3latTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_xyTb4b4b4: Tff7b72return Te6edf3lat
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_yTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3latTb4b4b4)

Tff7b72def Td2a8ffget_lonTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3xTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_xyTb4b4b4: Tff7b72return Te6edf3x
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_lonTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3xTb4b4b4)

Tff7b72def Td2a8ffget_latTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3yTb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72selfTff7b72.Td2a8ffis_xyTb4b4b4: Tff7b72return Te6edf3y
Tff7b72return Tffa657superTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffget_latTb4b4b4(Te6edf3zoomTb4b4b4, Te6edf3yTb4b4b4)

Tff7b72def Td2a8ffprefetch_tileTb4b4b4(Tff7b72selfTb4b4b4, Te6edf3zoomTb4b4b4, Te6edf3tile_xTb4b4b4, Te6edf3tile_yTb4b4b4)Tb4b4b4:
T8b949e# No-op for local MBTiles sources
Tff7b72pass


──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────